package com.ywyself.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.ywyself.dao.OptionDao;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsStringUtils;
import com.ywyself.model.Option;

/**
 * 
 * @author YuWenYue
 * @date 2017年10月16日 下午9:00:40
 */
public class OptionService {
	public static final OptionService EXC = new OptionService();
	private static final OptionDao od = new OptionDao();

	/**
	 * 将页面中的配置的键通过配置文件映射为数据库中的键<br/>
	 * 传入的键为控制层输入的，经过转换后，键为数据库中的字段名，值是待修改的值
	 * 
	 * @param map
	 * @return data:Map<String, String>
	 */
	public YsKit buildFieldKV(Map<String, String> map) {
		if (map == null) {
			return YsKit.fail().code("300").msg("待修改的数据不能为空");
		}
		Prop siteConfigKV = PropKit.getProp("siteConfigKV.txt");
		Map<String, String> fieldKVMap = new HashMap<String, String>(map.size());
		for (Entry<String, String> e : map.entrySet()) {
			String key = siteConfigKV.get(e.getKey());
			String val = e.getValue();
			if (YsStringUtils.isEmpty(key)) {
				return YsKit.fail().code("410").msg("无法在配置中检索到数据的键");
			}
			fieldKVMap.put(key, val);
		}
		return YsKit.ok().code("100").msg("数据的键值建立成功").data(fieldKVMap);
	}

	/**
	 * 更新网站配置
	 * 
	 * @param map
	 *            更新的数据
	 * @return
	 */
	public YsKit update(Map<String, String> map) {
		if (map == null || map.size() == 0) {
			return YsKit.fail().code("300").msg("数据不能为空");
		} else {
			YsKit retBuild = OptionService.EXC.buildFieldKV(map);
			if (retBuild.isOk()) {
				Map<String, String> fieldKVMap = retBuild.getData();
				return od.update(fieldKVMap);
			} else {
				return retBuild;
			}
		}
	}

	/**
	 * 获取网站的配置信息
	 * 
	 * @return SiteConfig对象或者null
	 */
	public YsKit getAll() {
		YsKit ret = od.getAll();
		if (ret.isOk()) {
			List<Option> list = ret.getData();
			if (list == null || list.size() == 0) {
				return YsKit.fail().msg("没有查询到配置信息");
			} else {
				Map<String, String> cfgMap = new HashMap<String, String>(list.size());
				for (Option entry : list) {
					cfgMap.put(entry.getCfgKey(), entry.getCfgValue());
				}
				return YsKit.ok().msg("数据为map对象").data(cfgMap);
			}
		} else {
			return ret;
		}
	}
}
